#include "groupfileitem.h"
#include "ui_groupfileitem.h"
#include "mytcpsocket.h"
#include <QFileDialog>
#include <QLabel>

GroupFileItem::GroupFileItem(struct st_file _file,QWidget *parent) :
    QWidget(parent),
    ui(new Ui::GroupFileItem)
{
    ui->setupUi(this);

    file = _file;

    QString hz = file.fname.split('.').back();

    // 根据文件后缀，来选择图标
    if(hz == "docx" || hz == "doc")
    {
        ui->lab_icon->setPixmap(QPixmap(":/prefix2/software/gfile_docx.png"));
    }
    else if(hz == "pdf")
    {
        ui->lab_icon->setPixmap(QPixmap(":/prefix2/software/gfile_pdf.png"));
    }
    else
    {
        ui->lab_icon->setPixmap(QPixmap(":/prefix2/software/gfile_txt.png"));
    }
    // 禁止换行，这样文本会在一行内显示
    ui->lab_fname->setWordWrap(false);

    QString str = file.fname.left(5);
    QString newStr = str + "...";
    ui->lab_fname->setText(newStr);

    // 计算文件大小
    QString m_fsize;
    // 1B ~ 1023B
    if(file.fsize < 1024){
        m_fsize = QString("%1%2").arg(file.fsize).arg("B");
    }
    // 1KB ~ 1023KB
    else if(file.fsize >= 1024 && file.fsize < 1048576){
        m_fsize = QString("%1%2").arg(file.fsize/1024).arg("KB");
    }
    // 1MB ~ 1023MB
    else if(file.fsize >= 1048576 && file.fsize < 1073741824){
        m_fsize = QString("%1%2").arg(file.fsize/1024/1024).arg("MB");
    }
    // 1GB ~ ...
    else if(file.fsize >= 1073741824){
        m_fsize = QString("%1%2").arg(file.fsize/1024/1024/1024).arg("GB");
    }

    QString tip = QString("文件名：%1\n文件大小：%2\n上传者：%3\n上传时间：%4\n有效期：永久")
            .arg(file.fname).arg(m_fsize).arg(file.nick).arg(file.upload_time);
    ui->lab_fname->setToolTip(tip);

    // qss渲染
    setQssStyle(QString("../style/GroupFileItem.qss"),this);
}

GroupFileItem::~GroupFileItem()
{
    delete ui;
}

void GroupFileItem::on_btn_download_clicked()
{
    // 选择本地保存的路径
    QString filePath = QFileDialog::getSaveFileName(this, "保存文件", "../recv", "Text Files (*.txt)");

    if (!filePath.isEmpty()) {
        // 记录保存文件的本地路径
        GlobalObject::getGlobalObject()->setSaveFileLocalPath(filePath);
        // 向服务器发送群文件下载请求(获取群文件在资源路径)
        QVariantMap map;
        map["cmd"] = "download_group_file";
        map["fileID"] = file.fid;

        GlobalObject::getGlobalObject()->sendRequest(map);

    } else {
        // 用户取消了操作或对话框因其他原因关闭
    }
}

